package com.moss.cloud.base.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moss.cloud.base.api.model.from.*;
import com.moss.cloud.base.api.model.param.UserPageParam;
import com.moss.cloud.base.api.model.vo.BaseUserVO;
import com.moss.cloud.base.api.model.vo.UserPageVO;
import com.moss.cloud.common.base.model.po.SysUser;

import java.util.List;

/**
 * 用户信息表服务接口
 *
 * @author 瑾年
 * @date 2023年3月23日
 */
public interface ISysUserService extends IService<SysUser> {
    /**
     * 保存用户信息--通用用户注册
     *
     * @param sysUserForm
     * @return
     * @throws Exception
     */
    Boolean saveUser(SysUserForm sysUserForm) throws Exception;

    /**
     * 删除用户信息id
     *
     * @param preUserFrom
     * @return
     */
    Boolean removeUser(PreUserFrom preUserFrom);

    /**
     * 手动锁定账号
     *
     * @param userLockFrom
     * @return
     */
    Boolean lockAccount(UserLockFrom userLockFrom);

    /**
     * 手动解锁账号
     *
     * @param userUnlockFrom
     * @return
     */
    Boolean unlockAccount(UserUnlockFrom userUnlockFrom);

    /**
     * 分页查询用户信息
     *
     * @param userPageParam
     * @return
     */
    IPage<UserPageVO> userPage(UserPageParam userPageParam);

    /**
     * 管理员添加用户
     *
     * @param sysUserForm
     * @return
     * @throws Exception
     */
    Boolean adminAddUser(SysUserForm sysUserForm) throws Exception;

    /**
     * 管理员修改用户
     *
     * @param sysUserForm
     * @return
     * @throws Exception
     */
    Boolean adminUpdateUser(SysUserForm sysUserForm) throws Exception;


    /**
     * 获取当前登录用户信息
     *
     * @return
     */
    BaseUserVO userInfo();

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId
     * @return
     */
    SysUser findByUserId(Long userId);

    /**
     * 搜索用户
     *
     * @param userPageParam
     * @return
     */
    List<UserPageVO> searchUser(UserPageParam userPageParam);

    /**
     * 更新用户租户
     *
     * @param updateUserTenantFrom
     * @return
     */
    Boolean updateUserTenant(UpdateUserTenantFrom updateUserTenantFrom);

    /**
     * 重置用户密码
     *
     * @param baseFrom
     * @return
     */
    boolean resetPassword(BaseFrom baseFrom) throws Exception;

    /**
     * 用户修改密码
     *
     * @param updatePasswordFrom
     * @return
     */
    boolean updatePassword(UpdatePasswordFrom updatePasswordFrom) throws Exception;

    /**
     * 用户更新基本信息
     *
     * @param updateUserForm
     * @return
     */
    boolean updateSelf(UpdateUserForm updateUserForm);

    /**
     * 员工离职
     *
     * @param baseFrom
     * @return
     */
    boolean userDepart(BaseFrom baseFrom);

    /**
     * 用户数据权限
     *
     * @param userId
     */
    SysUser userDataPermissions(Long userId);

}
